package com.dreamder.view;

import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import javax.ws.rs.Consumes;
import javax.ws.rs.GET;
import javax.ws.rs.POST;
import javax.ws.rs.Path;
import javax.ws.rs.PathParam;
import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.Response;

import com.dreamder.business.SonhoBO;
import com.dreamder.business.UsuarioBO;
import com.dreamder.model.Sonho;
import com.dreamder.model.Usuario;
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;

@Path("/sonhoServlet")
public class SonhoServlet {

	@POST
	@Consumes(MediaType.APPLICATION_JSON)
	@Path("/cadastrarSonho")
	public Response cadastrarSonho(String sonhoJson) {

		GsonBuilder builder = new GsonBuilder();
		builder.setDateFormat("dd-MM-yyyy");
		Gson gson = builder.create();

		Sonho sonho;

		sonho = gson.fromJson(sonhoJson, Sonho.class);

		sonho.setRealizado(false);
		sonho.setDataSonho(new Date());

		SonhoBO bo = new SonhoBO();
		bo.cadastrarSonho(sonho);

		return Response.status(201).entity("sonho cadastrado").build();

	}

	@POST
	@Consumes(MediaType.APPLICATION_JSON)
	@Path("/colaborar")
	public Response colaborar(String sonhoJson) {

		GsonBuilder builder = new GsonBuilder();
		builder.setDateFormat("dd-MM-yyyy");
		Gson gson = builder.create();

		Sonho sonho = gson.fromJson(sonhoJson, Sonho.class);

		SonhoBO bo = new SonhoBO();
		UsuarioBO userBo = new UsuarioBO();

		Usuario user = new Usuario();

		for (Usuario u : sonho.getUsuariosParticipantes()) {
			user = userBo.buscarUsuario(u.getId());
		}

		sonho.setUsuariosParticipantes(new ArrayList<Usuario>());
		sonho.getUsuariosParticipantes().add(user);

		bo.colaborar(sonho);

		return Response.status(201).entity("sonho colaborado").build();

	}

	/*
	 * 
	 * @POST
	 * 
	 * @Consumes(MediaType.APPLICATION_JSON)
	 * 
	 * @Path("/autorizar") public Response autorizarUsuarioParticipante(String
	 * sonhoJson, String usuarioJson) {
	 * 
	 * GsonBuilder builder = new GsonBuilder();
	 * builder.setDateFormat("dd-MM-yyyy"); Gson gson = builder.create();
	 * 
	 * Sonho sonho = gson.fromJson(sonhoJson, Sonho.class); Usuario usuario =
	 * gson.fromJson(usuarioJson, Usuario.class);
	 * 
	 * SonhoBO bo = new SonhoBO(); bo.autorizarUsuarioParticipante(sonho,
	 * usuario);
	 * 
	 * return Response.status(201).entity("participacao autorizada").build();
	 * 
	 * }
	 * 
	 * @POST
	 * 
	 * @Consumes(MediaType.APPLICATION_JSON)
	 * 
	 * @Path("/listarSonhos") public Response listarSonhos(String categoriaJson)
	 * {
	 * 
	 * GsonBuilder builder = new GsonBuilder();
	 * builder.setDateFormat("dd-MM-yyyy"); Gson gson = builder.create();
	 * 
	 * Categoria categoria = gson.fromJson(categoriaJson, Categoria.class);
	 * SonhoBO bo = new SonhoBO(); List<Sonho> sonhos =
	 * bo.listarSonhos(categoria);
	 * 
	 * return Response.status(201).entity(sonhos).build();
	 * 
	 * }
	 */

	@GET
	@Produces(MediaType.APPLICATION_JSON)
	@Path("/listarSonhos")
	public String listarSonhos() {
		SonhoBO bo = new SonhoBO();
		List<Sonho> lista = bo.buscarTodos();

		GsonBuilder builder = new GsonBuilder();
		builder.setDateFormat("dd-MM-yyyy");
		Gson gson = builder.create();

		Map<String, List<Sonho>> mapa = new HashMap<String, List<Sonho>>();
		mapa.put("sonhos", lista);

		return gson.toJson(mapa);
	}

	@POST
	@Produces(MediaType.APPLICATION_JSON)
	@Path("/carregaSonho/{id}")
	public String carregaSonho(@PathParam("id") Long id) {

		SonhoBO bo = new SonhoBO();

		Sonho sonho = bo.carregaSonho(id);

		GsonBuilder builder = new GsonBuilder();
		builder.setDateFormat("dd-MM-yyyy");
		Gson gson = builder.create();

		Map<String, Sonho> mapa = new HashMap<String, Sonho>();
		mapa.put("sonho", sonho);

		return gson.toJson(mapa);
	}

	@GET
	@Produces(MediaType.APPLICATION_JSON)
	@Path("/buscarSonho/{palavra}")
	public String buscarSonho(@PathParam("palavra") String palavra) {

		SonhoBO bo = new SonhoBO();
		List<Sonho> lista = bo.pesquisarSonho(palavra);

		GsonBuilder builder = new GsonBuilder();
		builder.setDateFormat("dd-MM-yyyy");
		Gson gson = builder.create();

		Map<String, List<Sonho>> mapa = new HashMap<String, List<Sonho>>();
		mapa.put("sonhos", lista);

		return gson.toJson(mapa);
	}
	
	@GET
	@Produces(MediaType.APPLICATION_JSON)
	@Path("/buscarSonhoPorUsuario/{id}")
	public String buscarSonhoPorUsuario(@PathParam("id") String id) {

		SonhoBO bo = new SonhoBO();
		List<Sonho> lista = bo.pesquisarSonhosPorUsuario(Long.valueOf(id));

		GsonBuilder builder = new GsonBuilder();
		builder.setDateFormat("dd-MM-yyyy");
		Gson gson = builder.create();

		Map<String, List<Sonho>> mapa = new HashMap<String, List<Sonho>>();
		mapa.put("sonhos", lista);

		return gson.toJson(mapa);
	}

}
